home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / td187src.lzh / MAGICDOS.D < prev    next >
Text File  |  1991-06-08  |  9KB  |  266 lines

  1. (*######################################################################
  2.  
  3.   MAGIC         Modula's  All purpose  GEM  Interface  Cadre
  4.                 ¯         ¯            ¯    ¯          ¯
  5. ########################################################################
  6.  
  7.   DOS           Disk Operating System           Interface for Modula-2
  8.  
  9. ########################################################################
  10.   V2.00  17.10.90  Peter Hellinger   Anpassung an neues MagicSys
  11.   V1.03  01.09.90  Peter Hellinger   Bug in DTA gefixed
  12.   V1.01  18.06.90  Peter Hellinger   Auf Vorschlag von Thomas Tempelmann
  13.                                      wurden die Pterm-Funktionen abgeändert.
  14.   V1.00  (C) by    Peter Hellinger
  15. ######################################################################*)
  16.  
  17. DEFINITION MODULE MagicDOS;
  18.  
  19. FROM SYSTEM     IMPORT  ADDRESS;
  20. FROM MagicSys   IMPORT  Nil, Null,
  21.                         Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7,
  22.                         Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14, Bit15,
  23.                         LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL, sBITSET,
  24.                         lWORD, lINTEGER, lCARDINAL, lBITSET;
  25.  
  26.  
  27. CONST   EOK =      0;
  28.         Error =   -1;
  29.         EDrvNR =  -2;     (* Drive not ready *)
  30.         EUnCmd =  -3;     (* Unknown command *)
  31.         ECRC =    -4;     (* CRC error *)
  32.         EBadRq =  -5;     (* Bad request *)
  33.         ESeek  =  -6;     (* Seek error *)
  34.         EMedia =  -7;     (* Unknown media *)
  35.         ESecNF =  -8;     (* Sector not found *)
  36.         EPaper =  -9;     (* No paper *)
  37.         EWritF = -10;     (* Write fault *)
  38.         EReadF = -11;     (* Read fault *)
  39.         EGenrl = -12;     (* General error *)
  40.         EWrPro = -13;     (* Write protect *)
  41.         EChng =  -14;     (* Media change *)
  42.         EUnDev = -15;     (* Unknown device *)
  43.         EBadSF = -16;     (* Bad sectors on format *)
  44.         EOther = -17;     (* Insert other disk *)
  45.         EInvFN = -32;     (* Invalid function number *)
  46.         EFilNF = -33;     (* File not found *)
  47.         EPthNF = -34;     (* Path not found *)
  48.         ENHndl = -35;     (* No handles left *)
  49.         EAccDn = -36;     (* Access denied *)
  50.         EIHndl = -37;     (* Invalid handle *)
  51.         ENSMem = -39;     (* Insufficient memory *)
  52.         EIMBA =  -40;     (* Invalid memory block address *)
  53.         EDrive = -46;     (* Invaild drive specified *)
  54.         ENMFil = -49;     (* No more files *)
  55.         ERange = -64;     (* Range error *)
  56.         EIntrn = -65;     (* Internal error *)
  57.         EPLFmt = -66;     (* Invalid program load format *)
  58.         EGSBF =  -67;     (* Setblock failure due to growth restr *)
  59.  
  60.  
  61. PROCEDURE Pterm0;
  62.  
  63.  
  64. TYPE tChar =    RECORD
  65.                  CASE : sCARDINAL OF
  66.                   0:  long:     lCARDINAL;|
  67.                   1:  hi:       sCARDINAL;
  68.                       lo:       sCARDINAL;|
  69.                   2:  kbshift:  CHAR;
  70.                       reserved: CHAR;
  71.                       scan:     CHAR;
  72.                       char:     CHAR;|
  73.                  END;
  74.                 END;
  75.  
  76. (* Zum einfachen "auseinandernehmen" des Longwerts, den Cconin liefert.
  77.  * Um die gültigen kbshift-Bits zu bekommen, muß das Bit 3 in der System-
  78.  * variablen conterm gesetzt sein.
  79.  *)
  80.  
  81. PROCEDURE Cconin (): lCARDINAL;
  82. (* Die meisten Bindings liefern hier ein CHAR, was einer Unterschlagung
  83.  * gleichkommt.
  84.  *)
  85.  
  86. PROCEDURE Cconout (ch: CHAR);
  87.  
  88. PROCEDURE Cauxin (): sCARDINAL;
  89. (* Liefert nach Profibuch tatsächlich ein WORD. Wozu das allerdings gut
  90.  * sein soll...
  91.  *)
  92.  
  93. PROCEDURE Cauxout (ch: CHAR);
  94.  
  95. PROCEDURE Cprnout (ch: CHAR);
  96.  
  97. CONST Input = 377C;
  98.  
  99. PROCEDURE Crawio  (ch: CHAR): lCARDINAL;
  100.  
  101. PROCEDURE Crawin  (): lCARDINAL;
  102.  
  103. PROCEDURE Cnecin  (): lCARDINAL;
  104.  
  105. PROCEDURE Cconws  (string: ARRAY OF CHAR);
  106.  
  107. PROCEDURE Cconrs  (VAR string: ARRAY OF CHAR);
  108.  
  109. PROCEDURE Cconis  (): BOOLEAN;
  110.  
  111. PROCEDURE Dsetdrv (drive: sCARDINAL; VAR DriveMap: lBITSET);
  112.  
  113. PROCEDURE Cconos  (): BOOLEAN;
  114.  
  115. PROCEDURE Cprnos  (): BOOLEAN;
  116.  
  117. PROCEDURE Cauxis  (): BOOLEAN;
  118.  
  119. PROCEDURE Cauxos  (): BOOLEAN;
  120.  
  121. PROCEDURE Dgetdrv (): sCARDINAL;
  122.  
  123. TYPE    PtrDTA =        POINTER TO DTA;
  124.         DTA =           RECORD
  125.                          dReserved: ARRAY [0..20] OF Byte; (* 1.02 *)
  126.                          dAttrib:   Byte;
  127.                          dTime:     sCARDINAL;
  128.                          dDate:     sCARDINAL;
  129.                          dLength:   lCARDINAL;
  130.                          dFname:    ARRAY [0..13] OF CHAR;
  131.                         END;
  132.  
  133. PROCEDURE Fsetdta  (dtaptr: ADDRESS);
  134.  
  135. PROCEDURE Super    (VAR stack: ADDRESS);
  136.  
  137. PROCEDURE Tgetdate (): sCARDINAL;
  138.  
  139. PROCEDURE Tsetdate (date: sCARDINAL);
  140.  
  141. PROCEDURE Tgettime (): sCARDINAL;
  142.  
  143. PROCEDURE Tsettime (time: sCARDINAL);
  144.  
  145. PROCEDURE Fgetdta  (): ADDRESS;
  146.  
  147. PROCEDURE Sversion (): sCARDINAL;
  148.  
  149. PROCEDURE Ptermres (keep: lCARDINAL; return: sCARDINAL);
  150.  
  151.  
  152. TYPE    DISKINFO =      RECORD
  153.                          bFree:   lCARDINAL;
  154.                          bTotal:  lCARDINAL;
  155.                          bSecsiz: lCARDINAL;
  156.                          bClsiz:  lCARDINAL;
  157.                         END;
  158.  
  159. PROCEDURE Dfree   (VAR dib: ARRAY OF LOC; drive: sCARDINAL);
  160.  
  161. PROCEDURE Dcreate (pfad: ARRAY OF CHAR): sINTEGER;
  162.  
  163. PROCEDURE Ddelete (pfad: ARRAY OF CHAR): sINTEGER;
  164.  
  165. PROCEDURE Dsetpath (pfad: ARRAY OF CHAR): sINTEGER;
  166.  
  167. CONST   ReadOnly =      Bit0;
  168.         Hidden =        Bit1;
  169.         System =        Bit2;
  170.         Volume =        Bit3;
  171.         Folder =        Bit4;
  172.         Archive =       Bit5;
  173.  
  174. PROCEDURE Fcreate (name: ARRAY OF CHAR; attr: sBITSET): sINTEGER;
  175. (* Ordner erzeugen NUR mit Dcreate !!! *)
  176.  
  177. CONST   NamePRN =       'PRN:';
  178.         NameAUX =       'AUX:';
  179.         NameCON =       'CON:';
  180.  
  181. CONST   Read =          0;      (* Modus *)
  182.         Write =         1;
  183.         ReadWrite =     2;
  184.  
  185. CONST   StdIn =         0;      (* Keyboard *)
  186.         StdOut =        1;      (* Console *)
  187.         Serial =        2;      (* RS232 *)
  188.         Printer =       3;      (* Centronics *)
  189.         
  190. PROCEDURE Fopen  (name: ARRAY OF CHAR; mode: sCARDINAL): sINTEGER;
  191.  
  192. PROCEDURE Fclose (handle: sINTEGER): sINTEGER;
  193.  
  194. PROCEDURE Fread  (handle: sINTEGER; VAR count: lCARDINAL; buffer: ADDRESS);
  195.  
  196. PROCEDURE Fwrite (handle: sINTEGER; VAR count: lCARDINAL; buffer: ADDRESS);
  197.  
  198. PROCEDURE Fdelete (name: ARRAY OF CHAR): BOOLEAN;
  199.  
  200. CONST   SeekStart =     0;      (* Seekmodus *)
  201.         SeekPos =       1;
  202.         SeekEnd =       2;
  203.  
  204. PROCEDURE Fseek (offset: lINTEGER; handle, mode: sINTEGER): lCARDINAL;
  205.  
  206. PROCEDURE Fattrib (name: ARRAY OF CHAR; set: BOOLEAN; VAR attr: sBITSET);
  207.         
  208. PROCEDURE Fdup (handle: sINTEGER): sINTEGER;
  209.  
  210. PROCEDURE Fforce (std, nonstd: sINTEGER): BOOLEAN;
  211.  
  212. PROCEDURE Dgetpath (VAR pfad: ARRAY OF CHAR; drive: sCARDINAL);
  213.  
  214. CONST Minus1 =  0FFFFFFFFH;
  215.  
  216. PROCEDURE Malloc  (bytes: lCARDINAL): ADDRESS;
  217.  
  218. PROCEDURE Mfree (addr: ADDRESS): BOOLEAN;
  219.  
  220. PROCEDURE Mshrink (addr: ADDRESS; newSize: lCARDINAL): BOOLEAN;
  221.  
  222. CONST   LoadnGo =       0;
  223.         Load =          3;
  224.         Run =           4;
  225.         NewPD =         5;
  226.  
  227. PROCEDURE Pexec (mode: sCARDINAL; VAR name, tail, env: ARRAY OF CHAR): sINTEGER;
  228.  
  229. PROCEDURE Pterm (code: sINTEGER);
  230.  
  231. PROCEDURE Fsfirst (name: ARRAY OF CHAR; attr: sBITSET): sINTEGER;
  232.  
  233. PROCEDURE Fsnext (): sINTEGER;
  234.  
  235. PROCEDURE Frename (VAR curr, new: ARRAY OF CHAR): sINTEGER;
  236.  
  237. TYPE    DOSTIME =       RECORD
  238.                          time: sCARDINAL;
  239.                          date: sCARDINAL;
  240.                         END;
  241.  
  242. PROCEDURE Fdatime (handle: sINTEGER; VAR dostime: ARRAY OF LOC; set: BOOLEAN);
  243.  
  244.  
  245. (*====================================================================*)
  246. (*      Folgende Funktionen sind erst auf TT-Rechnern verfügbar!      *)
  247. (*                       Funktion ohne Gewähr 8-)                     *)
  248. (*====================================================================*)
  249.  
  250. CONST   STRAM =         0;
  251.         FASTRAM =       1;
  252.         STRAMpref =     2;
  253.         FAS